﻿using System;
using System.Collections.Generic;

using System.Text;
using System.Xml;

namespace Transformer.iHunter
{
    /// <summary>
    /// The interface of the message item
    /// </summary>
    public interface IMessage
    {
        /// <summary>
        /// GUID of the message.
        /// </summary>
        Guid Guid { get; }

        /// <summary>
        /// Gets the GUID of the original message if this message is a reply.
        /// </summary>
        /// <value>The reply GUID.</value>
        Guid ReplyGuid { get; }

        /// <summary>
        /// Gets or sets the title.
        /// </summary>
        /// <value>The title.</value>
        string Title { get; set; }

        /// <summary>
        /// Gets the GUID of the channel that creates and hold the message.
        /// </summary>
        /// <value>The GUID of the channel.</value>
        Guid ChannelGuid { get; }

        /// <summary>
        /// Whether the message has been read.
        /// </summary>
        bool Read { get; set; }

        /// <summary>
        /// Gets or sets the publish time.
        /// </summary>
        /// <value>The publish time.</value>
        DateTime PublishTime { get; set; }


        /// <summary>
        /// Gets or sets the update time.
        /// </summary>
        /// <value>The update time.</value>
        DateTime UpdateTime { get; set; }


        /// <summary>
        /// Gets or sets the author.
        /// </summary>
        /// <value>The author.</value>
        string Author { get; set; }


        /// <summary>
        /// Gets or sets the receiver.
        /// </summary>
        /// <value>The receiver.</value>
        string Receiver { get; set; }
        /// <summary>
        /// Gets or sets the category.
        /// </summary>
        /// <value>The category.</value>
        string Category { get; set; }


        /// <summary>
        /// Gets or sets the content.
        /// </summary>
        /// <value>The content.</value>
        string Content { get; set; }

        /// <summary>
        /// Gets the custom fields.
        /// </summary>
        /// <value>The custom fields.</value>
        IDictionary<string, string> CustomFields { get; }

        /// <summary>
        /// Gets container folder of this message.
        /// </summary>
        /// <value>The folder.</value>
        IFolder Folder { get; }


        /// <summary>
        /// Gets the attachments of the message.
        /// </summary>
        /// <value>The attachments.</value>
        ICollection<IAttachment> Attachments { get; }

        /// <summary>
        /// Gets or sets the GUID of the viewer provider that show this message
        /// </summary>
        /// <value>The viewer GUID.</value>
        Guid ViewerGuid { get; set; }

        /// <summary>
        /// Gets or sets the GUID of the editor provider that show this message
        /// </summary>
        /// <value>The editor GUID.</value>
        Guid EditorGuid { get; set; }

        int HashCode { get; }

        Guid OriginalFolderGuid { get; set; }
    }


}
